home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Muzyka / Edytory sampli (probek dzwieku) / ZynAddSubFX_2.2.0 / Setup_ZynAddSubFX-2.2.0.exe / source code / Misc / Master.h < prev    next >
C/C++ Source or Header  |  2005-03-14  |  5KB  |  166 lines

  1. /*
  2.   ZynAddSubFX - a software synthesizer
  3.  
  4.   Master.h - It sends Midi Messages to Parts, receives samples from parts,
  5.              process them with system/insertion effects and mix them
  6.   Copyright (C) 2002-2005 Nasca Octavian Paul
  7.   Author: Nasca Octavian Paul
  8.  
  9.   This program is free software; you can redistribute it and/or modify
  10.   it under the terms of version 2 of the GNU General Public License 
  11.   as published by the Free Software Foundation.
  12.  
  13.   This program is distributed in the hope that it will be useful,
  14.   but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.   GNU General Public License (version 2) for more details.
  17.  
  18.   You should have received a copy of the GNU General Public License (version 2)
  19.   along with this program; if not, write to the Free Software Foundation,
  20.   Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  21.  
  22. */
  23.  
  24. #ifndef MASTER_H
  25. #define MASTER_H
  26.  
  27. #include "../globals.h"
  28. #include "../Effects/EffectMgr.h"
  29. #include "Part.h"
  30. #include "../Output/Recorder.h"
  31. #include "Microtonal.h"
  32.  
  33. #include "Bank.h"
  34. #include "Dump.h"
  35. #include "../Seq/Sequencer.h"
  36. #include "XMLwrapper.h"
  37.  
  38. extern Dump dump;
  39. class Master{
  40.     public:    
  41.     Master();
  42.     ~Master();
  43.  
  44.     //saves all settings to a XML file
  45.     //returns 0 for ok  or <0 if there is an error
  46.     int saveXML(char *filename);
  47.  
  48.     //this adds the parameters to the XML data
  49.     void add2XML(XMLwrapper *xml);
  50.  
  51.     void defaults();
  52.  
  53.  
  54.     //loads all settings from a XML file
  55.     //returns 0 for ok or -1 if there is an error
  56.     int loadXML(char *filename);
  57.     void applyparameters();
  58.  
  59.     void getfromXML(XMLwrapper *xml);
  60.     
  61.     //get all data to a newly allocated array (used for VST)
  62.     //returns the datasize
  63.     int getalldata(char **data);
  64.     //put all data from the *data array to zynaddsubfx parameters (used for VST)
  65.     void putalldata(char *data,int size);
  66.  
  67.  
  68.  
  69.     //Midi IN
  70.     void NoteOn(unsigned char chan,unsigned char note,unsigned char velocity);
  71.     void NoteOff(unsigned char chan,unsigned char note);
  72.     void SetController(unsigned char chan,unsigned int type,int par);
  73.     //void NRPN...
  74.     
  75.     
  76.         void ShutUp();
  77.     int shutup;
  78.  
  79.     //Audio Output
  80.     void AudioOut(REALTYPE *outl,REALTYPE *outr);
  81.     //Audio Output (for callback mode). This allows the program to be controled by an external program
  82.     void GetAudioOutSamples(int nsamples,int samplerate,REALTYPE *outl,REALTYPE *outr);
  83.  
  84.  
  85.     void partonoff(int npart,int what);
  86.     
  87.     //parts
  88.     Part *part[NUM_MIDI_PARTS];
  89.         
  90.     //parameters
  91.     unsigned char Pvolume;
  92.     unsigned char Pkeyshift;
  93.     unsigned char Psysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS];
  94.     unsigned char Psysefxsend[NUM_SYS_EFX][NUM_SYS_EFX];
  95.     
  96.     //parameters control
  97.     void setPvolume(char Pvolume_);
  98.     void setPkeyshift(char Pkeyshift_);
  99.     void setPsysefxvol(int Ppart,int Pefx,char Pvol);
  100.     void setPsysefxsend(int Pefxfrom,int Pefxto,char Pvol);
  101.  
  102.     //effects
  103.     EffectMgr *sysefx[NUM_SYS_EFX];//system
  104.     EffectMgr *insefx[NUM_INS_EFX];//insertion
  105. //    void swapcopyeffects(int what,int type,int neff1,int neff2);
  106.  
  107.     //HDD recorder
  108.     Recorder HDDRecorder; 
  109.  
  110.     //part that's apply the insertion effect; -1 to disable
  111.         short int Pinsparts[NUM_INS_EFX];
  112.     
  113.     //peaks for VU-meter
  114.     void vuresetpeaks();
  115.     REALTYPE vuoutpeakl,vuoutpeakr,vumaxoutpeakl,vumaxoutpeakr,vurmspeakl,vurmspeakr;
  116.     int vuclipped;
  117.     
  118.     //peaks for part VU-meters
  119.     REALTYPE vuoutpeakpart[NUM_MIDI_PARTS];
  120.     unsigned char fakepeakpart[NUM_MIDI_PARTS];//this is used to compute the "peak" when the part is disabled
  121.  
  122.     Controller ctl;
  123.     int swaplr;//1 if L and R are swapped
  124.  
  125.     //Sequencer
  126.     Sequencer seq;
  127.     
  128.     //other objects 
  129.     Microtonal microtonal;
  130.     Bank bank;
  131.     
  132.     FFTwrapper *fft;
  133.     pthread_mutex_t mutex;
  134.  
  135.     private:
  136.     REALTYPE volume;    
  137.     REALTYPE sysefxvol[NUM_SYS_EFX][NUM_MIDI_PARTS];
  138.     REALTYPE sysefxsend[NUM_SYS_EFX][NUM_SYS_EFX];
  139.  
  140.     //Temporary mixing samples for part samples which is sent to system effect
  141.         REALTYPE *tmpmixl;
  142.         REALTYPE *tmpmixr;
  143.  
  144.  
  145.     int keyshift;
  146.  
  147.     //Audio Output samples (if it used GetAudioOutSamples - eg. for Jack output; elsewhere is unused)
  148.     REALTYPE *audiooutl;
  149.     REALTYPE *audiooutr;
  150.     
  151.     int ksoundbuffersample;//this is used to know if there is need to call AudioOut by GetAudioOutSamples method
  152.     REALTYPE ksoundbuffersamplelow;//this is used for resampling (eg. if Jack samplerate!= SAMPLE_RATE)
  153.     REALTYPE oldsamplel,oldsampler;//this is used for resampling
  154.  
  155.     //Theese are called by the NoteOn, NoteOff,SetController (which are from external sources like MIDI, Virtual Keyboard)
  156.     //and are called by internal parts of the program (like sequencer)
  157.     void noteon(unsigned char chan,unsigned char note,unsigned char velocity);
  158.     void noteoff(unsigned char chan,unsigned char note);
  159.     void setcontroller(unsigned char chan,unsigned int type,int par);
  160.  
  161. };
  162.  
  163.  
  164. #endif
  165.  
  166.